#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

#define SHOWHOST

void show_time(time_t timeVal)
{
    char *ptime;

    ptime = ctime(&timeVal);    // get the time string

    printf("%s",ptime);

}

void show_info(struct utmp *utbufp)
{
    if (utbufp->ut_type != USER_PROCESS) {  // user only
        return;
    }
    printf("%-8.8s",utbufp->ut_user);
    printf(" ");
    printf("%-8.8s",utbufp->ut_line);
    printf(" ");
    //printf("% 10ld",utbufp->ut_time);
    show_time(utbufp->ut_time);
    printf(" ");
    #ifdef SHOWHOST
    if (utbufp->ut_host[0] != '\0') {
        printf("(%s)",utbufp->ut_host);
    }
    #endif
    printf("\n");
}

int main()
{
    struct utmp current_record;
    int utmpfd;
    int reclen = sizeof(current_record);

    if ((utmpfd = open(UTMP_FILE,O_RDONLY)) == -1) {
        perror(UTMP_FILE);
        exit(1);
    }

    while (read(utmpfd,&current_record,reclen) == reclen) {
        show_info(&current_record);
    }
    close(utmpfd);

    return 0;
}


